编者按 《银河破裂者》是一款深受各种游戏类型影响的游戏。游戏的基地建设和基地防御方面让人回忆起了经典和现代的即时战略游戏。掠夺和制造系统类似于知名动作 RPG 游戏中的系统。动态天气、时间变化和独特的生物群落都是偏探索和生存的游戏的重要组成部分。而能将众多游戏类型串联起来,靠的就是由地图多样性带来的游戏玩法。接下来,本作的开发者将会为大家介绍游戏的程序化地图生成。
作者:Piotr Bomak
校稿:shushudai
本文内容首发Game Developer,经由GWB编译
https://www.gamedeveloper.com/disciplines/systematic-chaos---procedural-map-generation-in-the-riftbreaker
(转载请征得同意,文章仅为作者观点,不代表GWB立场)
《银河破裂者》的最大优点是不会有两局完全相同的游戏。即使知道会发生什么,玩家每次开始新游戏时也必须从头探索每个任务的具体细节。实现这种多样性的唯一方法是通过程序地图生成。此功能一直是《银河破裂者》的设计支柱之一,也是整个项目最重要的任务之一。该游戏使用我们自己的 Schmetterling 引擎,它也帮助我们进行了之前的项目 Zombie Driver 和 X-Morph: Defense。但是,这些游戏使用了预先设计的、固定的关卡。在本文中,我们将谈及我们为《银河破裂者》设计的世界生成系统。
地图生成过程是在每个新的生存模式开始之前执行的。这种模式的前提是每个会话都是独立的体验,而程序生成的世界对此有很大帮助。该过程分为几个阶段——让我们来看看具体每个阶段。
该过程开始于用户对生物群落的选择。对于玩家来说,生物群落的选择将影响他们将要遇到的生物类型、可用的动态天气事件池,以及资源的可用性以及游戏区域的整体外观和感受。然而,对于游戏本身,生物群落定义了一组将影响世界生成过程的总体参数。《银河破裂者》中的每个生物群落预设都包含有关光照参数、天空盒及其属性的信息,以及一组用作地形基础纹理的材质。生物群落还定义了在生成地图时可供游戏使用的地块。玩家在战役中会遇到的多种生物群落片段:丛林,沙漠,酸地和岩浆生物群落没有“固定”配置,这意味着两个“丛林生物群落”的地图可能看起来非常不同。我们靠生物群落随机化实现了这一点。我们没有为游戏提供一组它必须使用的属性,而是为它提供了一组预配置的随机选项。因此,游戏几乎不可能为任何给定的两场游戏选择一组完全相同的材料、天空盒和照明。虽然仍然由我们的设计师预先定义,但生物群系属性的混合重组,从一开始就为世界生成引入了一些多样性。
在选择了所有生物群落参数后,算法开始对地块执行第一次操作。地块是我们在《银河破裂者》中生成地图的基本构建方块。它们是我们的关卡设计师手动准备的最小的可编辑模块。它们的最小尺寸为 128x128 米(或 64x64 游戏内网格。我们游戏中的每个网格都是 2x2 平方米)。地块在准备投入游戏之前需要满足一些基本标准。当然,这些要求很容易满足,并且可以通过一些创造性的方式来满足,这样它们就不会限制设计师的自由。
地块的设计师只需要用几种类型的遮罩来覆盖地形纹理将从可用组中随机选择其中一项要求是使用地形混合来掩盖表面。表面积可以由三种全局材料之一覆盖——为简单起见,我们将它们命名为 A、B 和 C——在生物群落随机化过程中选择的材料。设计师不选择具体的材料,他们只是使用材料组 A(例如沙质类)、材料组 B(例如草地类)和材料组 C(例如岩石层类)指定游戏将覆盖的区域。也可以用真实的纹理来绘制一个区域。在这种情况下,随机化过程不会影响它。 如果设计师选择使用常规纹理而不是蒙版,则该区域将不会受到随机化过程的影响。这在物件下添加细节很有用在这之后,地图制作者可以开始为游戏的逻辑元素放置生成点。他们决定玩家可以从哪里开始旅程,在哪里放置资源(及其种类),以及将生成的游戏内 NPC 的位置。
在这里你可以准确地看到哪些区域被标记为会由预制体替换,以及哪些物件已被自动放置
我们决定在《银河破裂者》的世界生成算法中加入的另一个随机元素,也就是所谓的预制体。在我们的项目中,预制体是一个特殊的手工场景,由设计师填充各种物件。它们的目的是填补设计师留下的地块的空白空间,并标记为由预制体遮蔽。换句话说——预制件藏在常规地块底下,当有上面留有足够空间时就会跳出来,以随机方式用物件填充该区域,而无需任何额外的人工输入。设计师选择他们希望在新地块上使用的预制场景。每个预制体都有自己的遮罩,而设计师会决定在哪里使用它。然后来自预制场景的物件将填充遮罩区域。生成地图时,预制体的位置和方向是随机选择的。然后,将预制场景的多个副本缝合在一起,位于游戏世界的整个区域下方。这样,我们可以确定无论创作者指定的区域如何,预制蒙版都能够用物件填充设计师标记的区域。定位、方向和预制选择的细微差异可以极大地改变地块的感觉。预制场景有几种变体,其中挤满了物件,因此无论处于何处,它们都可以完成自己的工作
这是同一张地图。唯一改变的是预制随机化的生成器种子。差别可以非常细微,也可以大相径庭
现在地块已经随机化了,是时候生成地图了。游戏会检查地图应该有多大——我们支持各种地图尺寸,从单地块到 12x12 块的庞然大物。《银河破裂者》当前版本为生存模式生成 5x5 地图,为战役模式生成不同尺寸的地图。地图的大小会影响游戏选择和引擎性能。战役中的探索任务需要更大的可玩区域,而基地防御目标可以适应更小的世界,以实现更精简的游戏玩法。
设计者还应为地图的每个边分配信息以进行匹配。只有当它们的边匹配时,地块才会相互连接,从而防止连接错误。地块随机化过程选择将用于生成地图的地块、将使用哪些生成点以及地块将如何旋转(我们支持 0、90、180 和 270 度的旋转)。地块在地图生成过程中可能会重复,并且它们的属性可能因实例而异。 这个游戏世界是通过解决“王的地块问题”的一个版本而产生的。您可以在此处阅读有关此概念的信息。在最初的问题中,地块的彩色边必须相互匹配而不执行任何旋转。由于我们允许旋转,因此我们的案例稍微简化了一点,但是,当涉及到侧面时,相邻的地块仍然必须彼此匹配。这需要相当多的操作才能使这一切奏效,但由此产生的组合数量非常高。 创建更大面积的地形也是可行的。游戏仍然将它们视为一个地块,将整个结构视作一个整体,并在地图生成过程中将其与其他地块配合。它允许设计师创建跨地块结构,如山脉或峡谷值得一提的是,并非所有地块都需要是 128x128 平方米。我们还支持多个‘基础’地块的组合,以支持跨越多个地块的独特结构,例如巨大的岩层、大型湖泊或河流。如果像这样的特殊地块结构被选择作为生成世界的一部分,它会被完整地放在地图上,以保持设计师准备的道具的连续性。然后像往常一样用随机地块填充周围区域。
最后,在算法通过上述所有步骤生成地图后,我们可以继续进行资源分配。《银河破裂者》中的每个任务都定义了应该向玩家提供什么样的资源。但是,它只指定了任务期间可用的资源数量,而没有指定位置。这部分再次进行了随机。游戏为资源存储选择可能的重生点,并根据相关规则进行分配。
这是资源分配规则集的示例。所有游戏模式和地图都需要自己的规则来改变和平衡游戏体验。一旦算法选择了资源生成点,该过程就相当简单了。选择资源类型,然后是存储点的‘密度’——可供玩家使用的资源量。该值是任务逻辑文件中定义的最小值和最大值之间的简单随机。然后,游戏尝试确定资源存放的中心。该领域将是最丰富的中心,它将由不同的物理模型表示,以便于视觉识别。资源可以在标有红色的区域生成。游戏将确定资源存放的中心和产量,然后相应地调整网格
分配完所有资源后,游戏会检查所有玩家重生点,并选择一个最接近基础资源区的。一旦这个地点确定,玩家就可以开始游戏了。 我们对我们为《银河破裂者》开发的地图生成系统感到满意。它使我们能够在相对较短的时间内向游戏世界引入多种变化。甚至在生物群落池中添加几个新地块都会为新玩家和回归玩家带来有趣的体验。添加随机预制体,使地图地块每次都具有略微不同的外观和感觉,这样你就有了构建游戏的坚实基础。 目前这套系统非常实用,但仍然可以通过许多有用的功能进行改进,以使游戏世界更加逼真。我们正在研究动态 NPC 放置,它将根据生物群落、所选难度级别、一天中的时间以及玩家在游戏中的进度进行调整。有了这样的系统,《银河破裂者》将会鼓励玩家根据局势随时制定和调整对策,而不是每个任务都背板。